///*******************************************************************************
// * Copyright (c) 2008, 2009 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.jface.tests.labelProviders;
//
//import org.eclipse.core.runtime.AssertionFailedException;
//import org.eclipse.jface.resource.JFaceResources;
//import org.eclipse.jface.tests.viewers.ViewerTestCase;
//import org.eclipse.jface.viewers.CellLabelProvider;
//import org.eclipse.jface.viewers.ColumnPixelData;
//import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
//import org.eclipse.jface.viewers.IColorDecorator;
//import org.eclipse.jface.viewers.IDecorationContext;
//import org.eclipse.jface.viewers.IFontProvider;
//import org.eclipse.jface.viewers.ILabelDecorator;
//import org.eclipse.jface.viewers.ILabelProviderListener;
//import org.eclipse.jface.viewers.IStructuredContentProvider;
//import org.eclipse.jface.viewers.LabelProviderChangedEvent;
//import org.eclipse.jface.viewers.StructuredSelection;
//import org.eclipse.jface.viewers.StructuredViewer;
//import org.eclipse.jface.viewers.StyledString;
//import org.eclipse.jface.viewers.TableLayout;
//import org.eclipse.jface.viewers.TableViewer;
//import org.eclipse.jface.viewers.ViewerCell;
//import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.Font;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.graphics.TextLayout;
//import org.eclipse.swt.graphics.TextStyle;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Table;
//import org.eclipse.swt.widgets.TableColumn;
//
///**
// * Most of the setup has been taken from
// * org.eclipse.jface.snippets.viewers.Snippet010OwnerDraw.java
// *
// * @since 3.4
// *
// */
//public class DecoratingStyledCellLabelProviderTest extends ViewerTestCase {
//
//	// static ResourceManager resourceManager = PlatformUI.getWorkbench().
//	private class TestCellLabelProvider extends CellLabelProvider implements
//			IStyledLabelProvider, IFontProvider {
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
//		 */
//		public void update(ViewerCell cell) {
//			Object element = cell.getElement();
//			cell.setText((element == null) ? "" : element.toString());
//			cell.setImage(getImage(element));
//			cell.setFont(JFaceResources.getFont(JFaceResources.BANNER_FONT));
//			cell.setForeground(cell.getControl().getDisplay().getSystemColor(
//					SWT.COLOR_BLUE));
//			cell.setBackground(cell.getControl().getDisplay().getSystemColor(
//					SWT.COLOR_RED));
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getImage(java.lang.Object)
//		 */
//		public Image getImage(Object element) {
//			// create a resource manager that holds onto images
//			// OR create image set, dispose in teardown
//
//			return fViewer.getControl().getDisplay().getSystemImage(
//					SWT.ICON_WARNING);
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
//		 */
//		public StyledString getStyledText(Object element) {
//			return new StyledString(element.toString(),
//					StyledString.COUNTER_STYLER);
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
//		 */
//		public Font getFont(Object element) {
//			return JFaceResources.getFont(JFaceResources.BANNER_FONT);
//		}
//
//	}
//
//	private class TestLabelDecorator implements ILabelDecorator,
//			IColorDecorator {
//
//		public Image decorateImage(Image image, Object element) {
//			return image;
//		}
//
//		public String decorateText(String text, Object element) {
//			return text;
//		}
//
//		public void addListener(ILabelProviderListener listener) {
//		}
//
//		public void dispose() {
//		}
//
//		public boolean isLabelProperty(Object element, String property) {
//			return false;
//		}
//
//		public void removeListener(ILabelProviderListener listener) {
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.IColorDecorator#decorateBackground(java.lang.Object)
//		 */
//		public Color decorateBackground(Object element) {
//			return fViewer.getControl().getDisplay().getSystemColor(
//					SWT.COLOR_RED);
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.viewers.IColorDecorator#decorateForeground(java.lang.Object)
//		 */
//		public Color decorateForeground(Object element) {
//			return fViewer.getControl().getDisplay().getSystemColor(
//					SWT.COLOR_BLUE);
//		}
//	}
//
//	private CountryEntry[] entries;
//	protected String changeMe = "OLD";
//	private static int COLUMN_COUNT = 3;
//
//	public DecoratingStyledCellLabelProviderTest(String name) {
//		super(name);
//		entries = new CountryEntry[3];
//		entries[0] = new AustriaEntry();
//		entries[1] = new GermanyEntry();
//		entries[2] = new EnglandEntry();
//	}
//
//	protected StructuredViewer createViewer(Composite parent) {
//		TableViewer viewer = new TableViewer(parent, SWT.FULL_SELECTION);
//
//		viewer.setContentProvider(new IStructuredContentProvider() {
//			/*
//			 * (non-Javadoc)
//			 *
//			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
//			 */
//			public void dispose() {
//			};
//
//			/*
//			 * (non-Javadoc)
//			 *
//			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
//			 */
//			public Object[] getElements(Object inputElement) {
//				return entries;
//			};
//
//			/*
//			 * (non-Javadoc)
//			 *
//			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
//			 *      java.lang.Object, java.lang.Object)
//			 */
//			public void inputChanged(org.eclipse.jface.viewers.Viewer viewer,
//					Object oldInput, Object newInput) {
//			}
//
//		});
//		createColumns(viewer);
//		viewer.setLabelProvider(createLabelProvider());
//
//		GridData data = new GridData(GridData.GRAB_HORIZONTAL
//				| GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
//
//		viewer.getControl().setLayoutData(data);
//		viewer.setSelection(new StructuredSelection(entries[1]));
//
//		return viewer;
//	}
//
//	/**
//	 * @return {@link DecoratingStyledCellLabelProvider}
//	 */
//	private DecoratingStyledCellLabelProvider createLabelProvider() {
//		return new DecoratingStyledCellLabelProvider(
//				new TestCellLabelProvider(), getDecorator(), getContext());
//	}
//
//	/**
//	 * @return
//	 */
//	private IDecorationContext getContext() {
//		return new IDecorationContext() {
//
//			public String[] getProperties() {
//				return null;
//			}
//
//			public Object getProperty(String property) {
//				return null;
//			}
//		};
//	}
//
//	/**
//	 * @return
//	 */
//	private ILabelDecorator getDecorator() {
//		return new TestLabelDecorator();
//	}
//
//	private ILabelProviderListener getListener() {
//		return new ILabelProviderListener() {
//
//			public void labelProviderChanged(LabelProviderChangedEvent event) {
//				changeMe = "been changed";
//			}
//		};
//	}
//
//	/**
//	 * Create the columns to be used in the tree.
//	 */
//	private void createColumns(TableViewer viewer) {
//		TableLayout layout = new TableLayout();
//		Table table = viewer.getTable();
//		table.setLayout(layout);
//		table.setHeaderVisible(true);
//		table.setLinesVisible(true);
//
//		for (int i = 0; i < COLUMN_COUNT; i++) {
//			TableColumn tc = new TableColumn(table, SWT.NONE, i);
//			layout.addColumnData(new ColumnPixelData(100));
//			tc.setText(getTitleFor(i));
//		}
//	}
//
//	protected void setInput() {
//		fViewer.setInput(this);
//	}
//
//	// the tests
//	public void testGetDecorationContext() {
//		assertNotNull(getDecoratingStyledLabelProvider().getDecorationContext());
//	}
//
//	public void testSetDecorationContext() {
//		try {
//			getDecoratingStyledLabelProvider().setDecorationContext(null);
//			fail("DecoratingStyledCellLabelProvider.setDecorationContext did not throw an exception when passed null");
//		} catch (AssertionFailedException e) {
//			// A Good Thing.
//		}
//	}
//
//	public void testUpdate() {
//		Table table = ((TableViewer) fViewer).getTable();
//		String before = table.getItem(0).toString();
//		entries[0].name = "Updated";
//		fViewer.refresh();
//		assertNotSame(before, table.getItem(0).toString());
//	}
//
//	public void testGetForeground() {
//		// TODO: Incomplete test
//		// fViewer.getControl().getShell().setFocus();
//		//
//		// long stopTime = System.currentTimeMillis() + 1000;
//		// while (stopTime < System.currentTimeMillis()) {
//		// Display.getCurrent().readAndDispatch();
//		// }
//		//
//		// Table table = ((TableViewer) fViewer).getTable();
//		//
//		// TableItem ti = table.getItem(0);
//		//
//		// Color widget = ti.getForeground();
//		// assertEquals(widget,
//		// getDecoratingStyledLabelProvider().getForeground(
//		// ti));
//	}
//
//	public void testGetBackground() {
//		// TODO: Incomplete test
//
//		// Table table = ((TableViewer) fViewer).getTable();
//		// TableItem ti = table.getItem(0);
//		// Color d = ((DecoratingStyledCellLabelProvider) ((TableViewer)
//		// fViewer)
//		// .getLabelProvider(0)).getBackground(ti);
//		// assertEquals(d,
//		// getDecoratingStyledLabelProvider().getBackground(ti));
//	}
//
//	public void testGetFont() {
//		// TODO: Incomplete test
//
//		// Table table = ((TableViewer) fViewer).getTable();
//		// TableItem ti = table.getItem(0);
//
//		// assertEquals(f, getDecoratingStyledLabelProvider().getFont(ti));
//	}
//
//	public void testGetImage() {
//		Table table = ((TableViewer) fViewer).getTable();
//
//		assertEquals(table.getItem(0).getImage(),
//				getDecoratingStyledLabelProvider().getImage(table.getItem(0)));
//
//	}
//
//	public void testGetLabelDecorator() {
//		assertNotNull(getDecoratingStyledLabelProvider().getLabelDecorator());
//
//		getDecoratingStyledLabelProvider().setLabelDecorator(null);
//		assertNull(getDecoratingStyledLabelProvider().getLabelDecorator());
//	}
//
//	public void testSetLabelDecorator() {
//		ILabelDecorator labelDecorator = getDecorator();
//		getDecoratingStyledLabelProvider().setLabelDecorator(labelDecorator);
//		assertEquals(labelDecorator, getDecoratingStyledLabelProvider()
//				.getLabelDecorator());
//
//	}
//
//	public void testAddListener() {
//		String old = changeMe; // String will change because the listener will
//		// be listening for it
//		ILabelProviderListener listener = getListener();
//		getDecoratingStyledLabelProvider().addListener(listener);
//		getDecoratingStyledLabelProvider().setLabelDecorator(getDecorator());
//		assertNotSame(old, changeMe);
//	}
//
//	public void testRemoveListener() {
//		String old = changeMe = "OLD";
//		ILabelProviderListener listener = getListener();
//		getDecoratingStyledLabelProvider().addListener(listener);
//		getDecoratingStyledLabelProvider().removeListener(listener);
//		getDecoratingStyledLabelProvider().setLabelDecorator(getDecorator());
//		assertEquals(old, changeMe);
//	}
//
//	public void testIsLabelProperty() {
//		boolean check = getDecoratingStyledLabelProvider().isLabelProperty(
//				"element", "property");
//		assertTrue(check);
//	}
//
//	public void testDispose() {
//		fShell.dispose();
//		assertFalse(fViewer.getLabelProvider() instanceof DecoratingStyledCellLabelProvider);
//		// the viewer will return a new LabelProvider if the current is null
//	}
//
//	/**
//	 * @return Returns the {@link DecoratingStyledCellLabelProvider} used for
//	 *         this test
//	 */
//	private DecoratingStyledCellLabelProvider getDecoratingStyledLabelProvider() {
//		return ((DecoratingStyledCellLabelProvider) fViewer.getLabelProvider());
//	}
//
//	class CountryEntry {
//
//		String name;
//
//		String cupYear;
//
//		private String baseName;
//
//		/**
//		 * Create a new instance of the receiver.
//		 *
//		 * @param countryName
//		 * @param worldCupYear
//		 */
//		CountryEntry(String countryName, String englishName, String worldCupYear) {
//			name = countryName;
//			cupYear = worldCupYear;
//			baseName = englishName;
//		}
//
//		public String toString() {
//			return name + " " + cupYear + " " + baseName;
//		}
//
//		/**
//		 * @param index
//		 * @return
//		 */
//		public int getHeight(Event event) {
//			switch (event.index) {
//			case 0:
//				return event.gc.textExtent(name).y;
//			case 1:
//				return 50;
//			case 2:
//				return event.gc.textExtent(cupYear).y;
//			default:
//				return 10;
//			}
//		}
//
//		/**
//		 * @param index
//		 * @return
//		 */
//		public int getWidth(Event event) {
//
//			switch (event.index) {
//			case 0:
//				return event.gc.textExtent(getDisplayString().toString()).x + 4;
//
//			case 1:
//				return 200;
//
//			case 2:
//				return event.gc.textExtent(cupYear).x + 5;
//
//			default:
//				return 10;
//			}
//		}
//
//		/**
//		 * Draw the flag in bounds.
//		 *
//		 * @param event
//		 */
//		protected void drawFlag(Event event) {
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_BLUE));
//
//			Rectangle bounds = event.getBounds();
//			bounds.width += 100;
//			event.gc.fillRectangle(bounds);
//		}
//
//		/**
//		 * Draw the cup year
//		 *
//		 * @param event
//		 */
//		private void drawCupYear(Event event) {
//			event.gc.drawText(cupYear, event.x, event.y);
//
//		}
//
//		/**
//		 * Draw the name of the receiver.
//		 *
//		 * @param event
//		 */
//		protected void drawName(Event event) {
//
//			StringBuffer buffer = getDisplayString();
//
//			Display display = fViewer.getControl().getDisplay();
//			TextLayout layout = new TextLayout(display);
//			layout.setText(buffer.toString());
//
//			TextStyle plain = new TextStyle(JFaceResources
//					.getFont(JFaceResources.DEFAULT_FONT), display
//					.getSystemColor(SWT.COLOR_LIST_FOREGROUND), display
//					.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
//
//			TextStyle italic = new TextStyle(JFaceResources.getFontRegistry()
//					.getItalic(JFaceResources.DEFAULT_FONT), display
//					.getSystemColor(SWT.COLOR_BLUE), display
//					.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
//
//			layout.setStyle(plain, 0, name.length() - 1);
//			layout.setStyle(italic, name.length(), buffer.length() - 1);
//
//			layout.draw(event.gc, event.x, event.y);
//
//			layout.dispose();
//
//		}
//
//		/**
//		 * @return
//		 */
//		private StringBuffer getDisplayString() {
//			StringBuffer buffer = new StringBuffer();
//			buffer.append(name);
//			buffer.append(" (");
//			buffer.append(baseName);
//			buffer.append(")");
//			return buffer;
//		}
//
//		/**
//		 * @param event
//		 */
//		public void draw(Event event) {
//
//			switch (event.index) {
//			case 0:
//				drawName(event);
//				break;
//			case 1:
//				drawFlag(event);
//				break;
//			case 2:
//				drawCupYear(event);
//				break;
//
//			default:
//				break;
//			}
//
//		}
//	}
//
//	private class GermanyEntry extends CountryEntry {
//
//		GermanyEntry() {
//			super("Deutschland", "Germany", "1990");
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(org.eclipse.swt.widgets.Event)
//		 */
//		protected void drawFlag(Event event) {
//
//			Rectangle bounds = event.getBounds();
//			bounds.width += 100;
//			int stripeHeight = bounds.height / 3;
//			Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width,
//					stripeHeight);
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_BLACK));
//			event.gc.fillRectangle(stripe);
//
//			stripe.y += stripeHeight;
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_YELLOW));
//			event.gc.fillRectangle(stripe);
//
//			stripe.y += stripeHeight;
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_RED));
//			event.gc.fillRectangle(stripe);
//
//		}
//
//	}
//
//	private class AustriaEntry extends CountryEntry {
//
//		AustriaEntry() {
//			super("\u00D6sterreich", "Austria", "TBD");
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(org.eclipse.swt.widgets.Event)
//		 */
//		protected void drawFlag(Event event) {
//
//			Rectangle bounds = event.getBounds();
//			bounds.width += 100;
//			int stripeHeight = bounds.height / 3;
//			Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width,
//					stripeHeight);
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_RED));
//			event.gc.fillRectangle(stripe);
//
//			stripe.y += stripeHeight;
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_WHITE));
//			event.gc.fillRectangle(stripe);
//
//			stripe.y += stripeHeight;
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_RED));
//			event.gc.fillRectangle(stripe);
//
//		}
//	}
//
//	private class EnglandEntry extends CountryEntry {
//		EnglandEntry() {
//			super("Blighty", "England", "1966");
//		}
//
//		/*
//		 * (non-Javadoc)
//		 *
//		 * @see org.eclipse.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(org.eclipse.swt.widgets.Event)
//		 */
//		protected void drawFlag(Event event) {
//
//			Rectangle bounds = event.getBounds();
//			bounds.width += 100;
//
//			event.gc.setBackground(fViewer.getControl().getDisplay()
//					.getSystemColor(SWT.COLOR_RED));
//			event.gc.fillRectangle(new Rectangle(bounds.width / 2 + bounds.x
//					- 5, bounds.y, 10, bounds.height));
//			event.gc.fillRectangle(new Rectangle(bounds.x, bounds.height / 2
//					+ bounds.y - 5, bounds.width, 10));
//
//		}
//	}
//
//	/**
//	 * @param i
//	 * @return
//	 */
//	private String getTitleFor(int i) {
//		switch (i) {
//		case 0:
//			return "Name";
//		case 1:
//			return "Flag";
//		case 2:
//			return "World Cup Year";
//		}
//		return "Unknown";
//	}
//
//}
